/**
 * <copyright>
 * </copyright>
 *

 */
package sk.scerbak.ucl.usecases.usecases;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Use Case</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getName <em>Name</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getDescription <em>Description</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getScope <em>Scope</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getLevel <em>Level</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getPrimaryActor <em>Primary Actor</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getSecondaryActors <em>Secondary Actors</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getTertiaryActors <em>Tertiary Actors</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getInterests <em>Interests</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getPreconditions <em>Preconditions</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getPostconditions <em>Postconditions</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getInvariants <em>Invariants</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getTrigger <em>Trigger</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getSteps <em>Steps</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getExtensions <em>Extensions</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getVariants <em>Variants</em>}</li>
 *   <li>{@link sk.scerbak.ucl.usecases.usecases.UseCase#getIssues <em>Issues</em>}</li>
 * </ul>
 * </p>
 *
 * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase()
 * @model
 * @generated
 */
public interface UseCase extends EObject
{
  /**
   * Returns the value of the '<em><b>Name</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Name</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Name</em>' attribute.
   * @see #setName(String)
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Name()
   * @model
   * @generated
   */
  String getName();

  /**
   * Sets the value of the '{@link sk.scerbak.ucl.usecases.usecases.UseCase#getName <em>Name</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Name</em>' attribute.
   * @see #getName()
   * @generated
   */
  void setName(String value);

  /**
   * Returns the value of the '<em><b>Description</b></em>' attribute.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Description</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Description</em>' attribute.
   * @see #setDescription(String)
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Description()
   * @model
   * @generated
   */
  String getDescription();

  /**
   * Sets the value of the '{@link sk.scerbak.ucl.usecases.usecases.UseCase#getDescription <em>Description</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Description</em>' attribute.
   * @see #getDescription()
   * @generated
   */
  void setDescription(String value);

  /**
   * Returns the value of the '<em><b>Scope</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Scope</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Scope</em>' containment reference.
   * @see #setScope(Scope)
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Scope()
   * @model containment="true"
   * @generated
   */
  Scope getScope();

  /**
   * Sets the value of the '{@link sk.scerbak.ucl.usecases.usecases.UseCase#getScope <em>Scope</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Scope</em>' containment reference.
   * @see #getScope()
   * @generated
   */
  void setScope(Scope value);

  /**
   * Returns the value of the '<em><b>Level</b></em>' attribute.
   * The literals are from the enumeration {@link sk.scerbak.ucl.usecases.usecases.Level}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Level</em>' attribute isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Level</em>' attribute.
   * @see sk.scerbak.ucl.usecases.usecases.Level
   * @see #setLevel(Level)
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Level()
   * @model
   * @generated
   */
  Level getLevel();

  /**
   * Sets the value of the '{@link sk.scerbak.ucl.usecases.usecases.UseCase#getLevel <em>Level</em>}' attribute.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Level</em>' attribute.
   * @see sk.scerbak.ucl.usecases.usecases.Level
   * @see #getLevel()
   * @generated
   */
  void setLevel(Level value);

  /**
   * Returns the value of the '<em><b>Primary Actor</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Primary Actor</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Primary Actor</em>' containment reference.
   * @see #setPrimaryActor(Actor)
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_PrimaryActor()
   * @model containment="true"
   * @generated
   */
  Actor getPrimaryActor();

  /**
   * Sets the value of the '{@link sk.scerbak.ucl.usecases.usecases.UseCase#getPrimaryActor <em>Primary Actor</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Primary Actor</em>' containment reference.
   * @see #getPrimaryActor()
   * @generated
   */
  void setPrimaryActor(Actor value);

  /**
   * Returns the value of the '<em><b>Secondary Actors</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Actor}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Secondary Actors</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Secondary Actors</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_SecondaryActors()
   * @model containment="true"
   * @generated
   */
  EList<Actor> getSecondaryActors();

  /**
   * Returns the value of the '<em><b>Tertiary Actors</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Actor}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Tertiary Actors</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Tertiary Actors</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_TertiaryActors()
   * @model containment="true"
   * @generated
   */
  EList<Actor> getTertiaryActors();

  /**
   * Returns the value of the '<em><b>Interests</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Interest}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Interests</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Interests</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Interests()
   * @model containment="true"
   * @generated
   */
  EList<Interest> getInterests();

  /**
   * Returns the value of the '<em><b>Preconditions</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Condition}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Preconditions</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Preconditions</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Preconditions()
   * @model containment="true"
   * @generated
   */
  EList<Condition> getPreconditions();

  /**
   * Returns the value of the '<em><b>Postconditions</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Condition}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Postconditions</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Postconditions</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Postconditions()
   * @model containment="true"
   * @generated
   */
  EList<Condition> getPostconditions();

  /**
   * Returns the value of the '<em><b>Invariants</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Condition}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Invariants</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Invariants</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Invariants()
   * @model containment="true"
   * @generated
   */
  EList<Condition> getInvariants();

  /**
   * Returns the value of the '<em><b>Trigger</b></em>' containment reference.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Trigger</em>' containment reference isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Trigger</em>' containment reference.
   * @see #setTrigger(Trigger)
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Trigger()
   * @model containment="true"
   * @generated
   */
  Trigger getTrigger();

  /**
   * Sets the value of the '{@link sk.scerbak.ucl.usecases.usecases.UseCase#getTrigger <em>Trigger</em>}' containment reference.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @param value the new value of the '<em>Trigger</em>' containment reference.
   * @see #getTrigger()
   * @generated
   */
  void setTrigger(Trigger value);

  /**
   * Returns the value of the '<em><b>Steps</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.ActionStep}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Steps</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Steps</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Steps()
   * @model containment="true"
   * @generated
   */
  EList<ActionStep> getSteps();

  /**
   * Returns the value of the '<em><b>Extensions</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Extension}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Extensions</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Extensions</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Extensions()
   * @model containment="true"
   * @generated
   */
  EList<Extension> getExtensions();

  /**
   * Returns the value of the '<em><b>Variants</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Variant}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Variants</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Variants</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Variants()
   * @model containment="true"
   * @generated
   */
  EList<Variant> getVariants();

  /**
   * Returns the value of the '<em><b>Issues</b></em>' containment reference list.
   * The list contents are of type {@link sk.scerbak.ucl.usecases.usecases.Issue}.
   * <!-- begin-user-doc -->
   * <p>
   * If the meaning of the '<em>Issues</em>' containment reference list isn't clear,
   * there really should be more of a description here...
   * </p>
   * <!-- end-user-doc -->
   * @return the value of the '<em>Issues</em>' containment reference list.
   * @see sk.scerbak.ucl.usecases.usecases.UsecasesPackage#getUseCase_Issues()
   * @model containment="true"
   * @generated
   */
  EList<Issue> getIssues();

} // UseCase
